package A2013;


/*
 100 可以表示为带分数的形式：100 = 3 + 69258 / 714
    还可以表示为：100 = 82 + 3546 / 197
    注意特征：带分数中，数字1~9分别出现且只出现一次（不包含0）。
    类似这样的带分数，100 有 11 种表示法。
题目要求：
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意：不要求输出每个表示，只统计有多少表示法！
例如：
用户输入:100
程序输出：11
再例如：
用户输入:105
程序输出：6
资源约定：
峰值内存消耗（含虚拟机） < 64M
CPU消耗  < 3000ms
 */
import java.util.Scanner;
public class _8_带分数 {
    static int[] arr={1,2,3,4,5,6,7,8,9};
    static int ans,N;
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        N =sc.nextInt();
        f(0 );
        System.out.println(ans);
    }

    private static void f(int i) {//全排列公式
        if (i>=9){
            for (int x = 1; x < 8; x++) {//N =a+ b/c   (N-a)=b/c  (N-a)*c=b
                int a= toInt(0,x);
                if (a>=N){
                    return;
                }
                for (int y = x+1; y < 10; y++) {
                    int b=toInt(x,y);
                    int c=toInt(y,9);
                    if ((N-a)*c == b) {
                        ans++;
                    }
                }
            }
            return;
        }
        for (int j = i; j < 9; j++) {
            swap(i,j);
            f(i+1);
            swap(i,j);//回溯
        }
    }

    private static int toInt(int i, int x) {
        int num=0;
        for (int j = i; j < x; j++) {
            num=num*10+arr[j];
        }
        return num;
    }

    private static void swap(int a, int b) {
        int t=arr[a];
        arr[a]=arr[b];
        arr[b]=t;
    }
}
